こちらの神記事を見ていた時 https://blog.kyubuns.dev/entry/2020/05/17/180917
ForEachAwaitAsync するつもりで ForEachAsync しないように! (RC4で対応済)
のなかで
await hoge.ToUniTaskAsyncEnumerable().ForEachAwaitAsync(async x =>
{
await UniTask.Delay(TimeSpan.FromSeconds(1));
Debug.Log($"Output {x}");
});
の ForEachAwaitAsync
部分が ForEachAsync
とかけてしまう。
しかしRC4で解決されました。
ということで、どういう挙動を差し込んだらエラーに出来るんだろうと疑問に思い調べてみましたところ、コミットを見つけたのでメモ
https://github.com/Cysharp/UniTask/commit/a52c26102bff9a53e30c1bbff3d91c0e452c3bc7
内容は以下のように、拡張メソッド記載でForEachAsyncメソッドを指定して呼び出された時、 Obsolete でエラー摘発を行い、 EditorBrowsableでそもそもコード記述中にインテリセンスとして表示させないようになっていました
/// <summary>Obsolete(Error), Use Use ForEachAwaitAsync instead.</summary>
[Obsolete("Use ForEachAwaitAsync instead.", true)]
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public static UniTask ForEachAsync<T>(this IUniTaskAsyncEnumerable<T> source, Func<T, UniTask> action, CancellationToken cancellationToken = default)
{
throw new NotSupportedException("Use ForEachAwaitAsync instead.");
}
/// <summary>Obsolete(Error), Use Use ForEachAwaitAsync instead.</summary>
[Obsolete("Use ForEachAwaitAsync instead.", true)]
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public static UniTask ForEachAsync<T>(this IUniTaskAsyncEnumerable<T> source, Func<T, int, UniTask> action, CancellationToken cancellationToken = default)
{
throw new NotSupportedException("Use ForEachAwaitAsync instead.");
}
なるほど! ということで.. まだまだ自分は言語機能の使い込みが出来てないなと